package com.simosoft.unitime.util;

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class UniDatabase {
	SQLiteDatabase dB;
	DbHelper dbHelper;
	Context c;
	private static final String DBNAME = "uniData";
	private static final int VERSION = 1;

	public UniDatabase(Context ctx) {
		c = ctx;
		dbHelper = new DbHelper(c, DBNAME, null, VERSION);

	}

	public void open() {
		dB = dbHelper.getWritableDatabase();
	}

	public void close() {
		dB.close();
	}

	public long insertDocente(String nome, String email, int sito, int corso) {
		ContentValues cv = new ContentValues();
		cv.put(DocentiMetaData.NOME, nome);
		cv.put(DocentiMetaData.EMAIL, email);
		cv.put(DocentiMetaData.ID_SITO, sito);
		cv.put(DocentiMetaData.ID_CORSO, corso);
		return dB.insert(DocentiMetaData.TITLE, null, cv);
	}

	public long insertSito(String value) {
		ContentValues cv = new ContentValues();
		cv.put(SitiMetaData.VALUE, value);
		return dB.insert(SitiMetaData.TITLE, null, cv);
	}

	public long insertCorso(String nome, int sito) {
		ContentValues cv = new ContentValues();
		cv.put(CorsiMetaData.NOME, nome);
		cv.put(CorsiMetaData.ID_SITO, sito);
		return dB.insert(CorsiMetaData.TITLE, null, cv);
	}

	public long insertOrario(String giorno, String oraIni, String oraFin,
			int corso) {
		ContentValues cv = new ContentValues();
		cv.put(OrariMetaData.GIORNO, giorno);
		cv.put(OrariMetaData.ORA_INIZIO, oraIni);
		cv.put(OrariMetaData.ORA_FINE, oraFin);
		cv.put(OrariMetaData.ID_CORSO, corso);
		return dB.insert(OrariMetaData.TITLE, null, cv);
	}

	public long insertEsame(int corso, String data_svolto, int voto,
			String data_accettato) {
		ContentValues cv = new ContentValues();
		cv.put(EsamiMetaData.ID_CORSO, corso);
		cv.put(EsamiMetaData.DATA_SVOLTO, data_svolto);
		cv.put(EsamiMetaData.VOTO, voto);
		cv.put(EsamiMetaData.DATA_ACC, data_accettato);
		return dB.insert(EsamiMetaData.TITLE, null, cv);
	}
	
	public long insertMemo(String data_ins,String desc,String data_sca,int corso){
		ContentValues cv = new ContentValues();
		cv.put(MemoMetaData.DATA_INS, data_ins);
		cv.put(MemoMetaData.DESCRIZIONE, desc);
		cv.put(MemoMetaData.DATA_SCA, data_sca);
		cv.put(MemoMetaData.ID_CORSO, corso);
		return dB.insert(MemoMetaData.TITLE, null, cv);
	}

	public static class DocentiMetaData {
		static final String TITLE = "docenti";
		static final String ID = "_id";
		static final String NOME = "nome";
		static final String EMAIL = "email";
		static final String ID_SITO = "id_sito";
		static final String ID_CORSO = "id_corso";
		static final String[] DOCENTI_ATTRIBUTES = { TITLE,
				ID + " integer PRIMARY KEY AUTOINCREMENT", NOME + " text",
				EMAIL + " text", ID_SITO + " integer", ID_CORSO + " integer" };
	}

	public static class SitiMetaData {
		static final String TITLE = "siti";
		static final String ID = "_id";
		static final String VALUE = "value";
		static final String[] SITI_ATTRIBUTES = { TITLE,
				ID + "integer PRIMARY KEY AUTOINCREMENT", VALUE + " text" };
	}

	public static class CorsiMetaData {
		static final String TITLE = "corsi";
		static final String ID = "_id";
		static final String NOME = "nome";
		static final String ID_SITO = "id_sito";
		static final String[] CORSI_ATTRIBUTES = { TITLE,
				ID + " integer PRIMARY KEY AUTOINCREMENT", NOME + " text",
				ID_SITO + " integer" };
	}

	public static class OrariMetaData {
		static final String TITLE = "orari";
		static final String ID = "_id";
		static final String GIORNO = "giorno"; // Giorno della settimana
		static final String ORA_INIZIO = "ora_inizio";
		static final String ORA_FINE = "ora_fine";
		static final String ID_CORSO = "id_corso";
		static final String[] ORARI_ATTRIBUTES = { TITLE,
				ID + " integer PRIMARY KEY AUTOINCREMENT", GIORNO + " text",
				ORA_INIZIO + " text", ORA_FINE + " text", ID_CORSO + " integer" };
	}

	public static class EsamiMetaData {
		static final String TITLE = "esami";
		static final String ID = "_id";
		static final String ID_CORSO = "id_corso";
		static final String DATA_SVOLTO = "data_svolgimento";
		static final String VOTO = "voto";
		static final String DATA_ACC = "data_accettato";
		static final String[] ESAMI_ATTRIBUTES = { TITLE,
				ID + " integer PRIMARY KEY AUTOINCREMENT",
				ID_CORSO + " integer", DATA_SVOLTO + " text",
				VOTO + " integer", DATA_ACC + " text" };
	}

	public static class MemoMetaData {
		static final String TITLE = "memo";
		static final String ID = "_id";
		static final String DATA_INS = "data_inserimento";
		static final String DESCRIZIONE = "descrizione";
		static final String DATA_SCA = "data_scadenza";
		static final String ID_CORSO = "id_corso";
		static final String[] MEMO_ATTRIBUTES = { TITLE,
				ID + " integer PRIMARY KEY AUTOINCREMENT", DATA_INS + " text",
				DESCRIZIONE + " text", DATA_SCA + " text",
				ID_CORSO + " integer" };
	}

	private class DbHelper extends SQLiteOpenHelper {

		public DbHelper(Context context, String name, CursorFactory factory,
				int version) {
			super(context, name, factory, version);
		}

		@Override
		public void onCreate(SQLiteDatabase db) {
			db.execSQL(createStatement(DocentiMetaData.DOCENTI_ATTRIBUTES));
			db.execSQL(createStatement(MemoMetaData.MEMO_ATTRIBUTES));
			db.execSQL(createStatement(CorsiMetaData.CORSI_ATTRIBUTES));
			db.execSQL(createStatement(EsamiMetaData.ESAMI_ATTRIBUTES));
			db.execSQL(createStatement(OrariMetaData.ORARI_ATTRIBUTES));
			db.execSQL(createStatement(SitiMetaData.SITI_ATTRIBUTES));
		}

		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			// TODO Auto-generated method stub

		}

		private String createStatement(String[] attributes) {
			String s = "CREATE TABLE IF NOT EXISTS " + attributes[0] + "( ";
			for (int i = 1; i < attributes.length; i++) {
				s = s + attributes[i];
				if (i != attributes.length - 1)
					s = s + ", ";
				else {
					s = s + ");";
				}
			}
			return s;
		}

	}
}
